package response

//response/response.go

import (
	"github.com/gin-gonic/gin"
)

type Response struct {
	data any
}

// 返回Response结构体
func Resp() *Response {
	return &Response{}
}

// 成功返回的消息
func (r *Response) Success(data gin.H) *Response {
	return r.Json(_succ(data))
}

// 成功返回的消息
func (r *Response) SuccessAny(data any) *Response {
	return r.Json(gin.H{
		"code": 0,
		"flag": true,
		"msg":  "成功",
		"data": data,
	})
}

// 成功返回的消息
func (r *Response) SuccessEmpty() *Response {
	return r.Json(_succ(gin.H{}))
}

// 一般错误返回消息
func (r *Response) Error(msg string) *Response {
	return r.Json(_error(6, msg))
}

// 数据库错误
func (r *Response) ErrorDB() *Response {
	return r.Json(_error(2, "数据库错误"))
}

// 授权错误
func (r *Response) ErrorAuth() *Response {
	return r.Json(_error(3, "无权限"))
}

// 参数错误
func (r *Response) ErrorParam() *Response {
	return r.Json(_error(4, "参数错误"))
}

// 登录错误
func (r *Response) ErrorLogin() *Response {
	return r.Json(_error(5, "未登录 / 登录超时"))
}

// 自定义错误信息返回
// 封装error信息的返回
func _error(code int, msg string) gin.H {
	return gin.H{
		"code": code,
		"flag": false,
		"msg":  msg,
		"data": nil,
	}
}

// 自定义错误信息返回
func _succ(data gin.H) gin.H {
	return gin.H{
		"code": 0,
		"flag": true,
		"msg":  "成功",
		"data": data,
	}
}

// 返回JSON数据
func (r *Response) Json(data gin.H) *Response {
	r.data = data
	return r
}

// 输出字符串内容
func (r *Response) String(data string) *Response {
	r.data = data
	return r
}

// 输出二进制内容
func (r *Response) Byte(data []byte) *Response {
	r.data = data
	return r
}

// 获取Data数据
func (r *Response) GetData() any {
	return r.data
}
